package main

import "fmt"

func main() {
	var num byte = 2
	var case1 byte = 2
	switch num {
	case 1, case1, case1: //可以多个条件用逗号分割
		fmt.Println("数值是1") //golang中case无break，一旦匹配就直接退出switch
	case 2, case1: //变量值可以重复，而字面值不可以
		fmt.Println("数值是2")
	// case 256: //数据类型必须匹配，256大于byte
	// 	fmt.Println("呵呵")
	default:
		fmt.Println("无效")
	}

	//switch中可以定义变量
	switch val := 10; {
	case val > 1:
		fmt.Println("大于1")
	case val > 2:
		fmt.Println("大于2")
	}

	//switch可以当做if else
	var flag = false
	switch {
	case flag:
		fmt.Println("true")
	case !flag:
		fmt.Println("false")
	}

	//switch可以用string
	var name = "路飞"
	switch name {
	case "路飞": //case可以无执行语句
		// fmt.Println("船长")
	case "乔巴":
		fmt.Println("医生")
	}

	//switch可以利用fallthrough来贯穿到下一层
	switch name {
	case "路飞":
		fmt.Println("船长")
		fallthrough //golang的贯穿不同于C# java，即使case不匹配也会执行下一个case内的代码块
	case "乔巴":
		fmt.Println("也是医生")
	}

}
